#ifndef __WIZ_BASE_UTILS_UNSPECIFIED_BOOL_HPP__SHANHAOBO__19800429__
#define __WIZ_BASE_UTILS_UNSPECIFIED_BOOL_HPP__SHANHAOBO__19800429__

#include "../Type/WizBaseType.hpp"

namespace Wiz
{
    namespace UnspecifiedBool
    {
        template<typename DerivedT, typename BaseT = ::Wiz::Null::Type>
        class Type : public BaseT
        {
        private:
            ::Wiz::Bool::Type IsTrue() const
            {
                WIZ_ASSERT(::Wiz::Bool::False);
                return ::Wiz::Bool::False;
            }
            WIZ_DECLARE_CLASS_THIS(Type);

            /// define member function pointer
            typedef ::Wiz::Bool::Type (tThis::*UnspecifiedBoolType)() const;

        public:
            operator UnspecifiedBoolType() const
            {
                return ::Wiz::Cast::Static<const DerivedT*>(this)->IsTrue() ? &tThis::IsTrue : WIZ_NULLPTR;
            }
        }; /// end of class Type
    } /// end of namespace UnspecifiedBoolType
} /// end of namespace Wiz

#endif /*__WIZ_BASE_UTILS_UNSPECIFIED_BOOL_HPP__SHANHAOBO__19800429__*/
